library(survival)
library(FRESA.CAD)
## Loading required package: Rcpp
## Loading required package: stringr
## Loading required package: miscTools
## Loading required package: Hmisc
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
##
## format.pval, units
## Loading required package: pROC
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
#library(corrplot)
#source("~/GitHub/FRESA.CAD/R/RRPlot.R")
#source("~/GitHub/FRESA.CAD/R/PoissonEventRiskCalibration.R")
op <- par(no.readonly = TRUE)
pander::panderOptions('digits', 3)
#pander::panderOptions('table.split.table', 400)
pander::panderOptions('keep.trailing.zeros',TRUE)
data(cancer)
colon <- subset(colon,etype==1)
colon$etype <- NULL
rownames(colon) <- colon$id
colon$id <- NULL
colon <- colon[complete.cases(colon),]
time <- colon$time
status <- colon$status
data <- colon
data$time <- NULL
data$study <- NULL
table(data$status)
0 1 442 446
dataColon <- as.data.frame(model.matrix(status~.*.,data))
dataColon$`(Intercept)` <- NULL
dataColon$time <- time/365
dataColon$status <- status
colnames(dataColon) <-str_replace_all(colnames(dataColon),":","_")
colnames(dataColon) <-str_replace_all(colnames(dataColon),"\\.","_")
colnames(dataColon) <-str_replace_all(colnames(dataColon),"\\+","_")
data <- NULL
trainsamples <- sample(nrow(dataColon),0.7*nrow(dataColon))
dataColonTrain <- dataColon[trainsamples,]
dataColonTest <- dataColon[-trainsamples,]
pander::pander(table(dataColonTrain$status))
| 0 | 1 |
|---|---|
| 298 | 323 |
pander::pander(table(dataColonTest$status))
| 0 | 1 |
|---|---|
| 144 | 123 |
ml <- BSWiMS.model(Surv(time,status)~1,data=dataColonTrain,NumberofRepeats = 3)
[++++++-+++++++-+++++-].
sm <- summary(ml)
pander::pander(sm$coefficients)
| Estimate | lower | HR | upper | u.Accuracy | |
|---|---|---|---|---|---|
| age_nodes | 0.000357 | 1.000 | 1.000 | 1.000 | 0.618 |
| differ_node4 | 0.061851 | 1.040 | 1.064 | 1.089 | 0.602 |
| rxLev_5FU_age | -0.001797 | 0.998 | 0.998 | 0.999 | 0.599 |
| node4 | 0.246491 | 1.164 | 1.280 | 1.406 | 0.602 |
| extent_node4 | 0.026209 | 1.016 | 1.027 | 1.037 | 0.602 |
| rxLev_5FU | -0.141253 | 0.821 | 0.868 | 0.919 | 0.599 |
| rxLev_5FU_extent | -0.035896 | 0.950 | 0.965 | 0.979 | 0.599 |
| rxLev_5FU_sex | -0.130516 | 0.830 | 0.878 | 0.928 | 0.583 |
| rxLev_5FU_differ | -0.059983 | 0.917 | 0.942 | 0.967 | 0.599 |
| nodes_node4 | -0.029021 | 0.960 | 0.971 | 0.983 | 0.605 |
| age_node4 | 0.001352 | 1.001 | 1.001 | 1.002 | 0.602 |
| rxLev_5FU_node4 | 0.024953 | 1.011 | 1.025 | 1.040 | 0.506 |
| nodes | 0.037216 | 1.016 | 1.038 | 1.060 | 0.620 |
| nodes_extent | 0.002215 | 1.001 | 1.002 | 1.004 | 0.626 |
| differ_extent | 0.030359 | 1.012 | 1.031 | 1.050 | 0.556 |
| nodes_surg | 0.002325 | 1.001 | 1.002 | 1.004 | 0.530 |
| extent | 0.064219 | 1.022 | 1.066 | 1.113 | 0.552 |
| sex_nodes | -0.015067 | 0.975 | 0.985 | 0.995 | 0.504 |
| rxLev_obstruct | 0.054747 | 1.017 | 1.056 | 1.097 | 0.506 |
| nodes_differ | 0.007726 | 1.002 | 1.008 | 1.013 | 0.618 |
| rxLev_nodes | 0.001293 | 1.000 | 1.001 | 1.002 | 0.564 |
| r.Accuracy | full.Accuracy | u.AUC | r.AUC | full.AUC | |
|---|---|---|---|---|---|
| age_nodes | 0.615 | 0.651 | 0.625 | 0.611 | 0.650 |
| differ_node4 | 0.625 | 0.604 | 0.612 | 0.615 | 0.613 |
| rxLev_5FU_age | 0.602 | 0.604 | 0.592 | 0.612 | 0.613 |
| node4 | 0.636 | 0.654 | 0.612 | 0.636 | 0.656 |
| extent_node4 | 0.630 | 0.609 | 0.612 | 0.626 | 0.617 |
| rxLev_5FU | 0.612 | 0.649 | 0.592 | 0.618 | 0.653 |
| rxLev_5FU_extent | 0.601 | 0.649 | 0.592 | 0.609 | 0.652 |
| rxLev_5FU_sex | 0.609 | 0.624 | 0.569 | 0.616 | 0.630 |
| rxLev_5FU_differ | 0.609 | 0.648 | 0.592 | 0.613 | 0.647 |
| nodes_node4 | 0.587 | 0.647 | 0.615 | 0.598 | 0.650 |
| age_node4 | 0.641 | 0.649 | 0.612 | 0.640 | 0.652 |
| rxLev_5FU_node4 | 0.602 | 0.604 | 0.522 | 0.612 | 0.613 |
| nodes | 0.627 | 0.658 | 0.626 | 0.633 | 0.660 |
| nodes_extent | 0.598 | 0.630 | 0.633 | 0.608 | 0.635 |
| differ_extent | 0.643 | 0.652 | 0.543 | 0.646 | 0.653 |
| nodes_surg | 0.586 | 0.601 | 0.539 | 0.590 | 0.602 |
| extent | 0.622 | 0.645 | 0.537 | 0.625 | 0.644 |
| sex_nodes | 0.645 | 0.660 | 0.510 | 0.647 | 0.662 |
| rxLev_obstruct | 0.605 | 0.620 | 0.523 | 0.615 | 0.628 |
| nodes_differ | 0.626 | 0.643 | 0.625 | 0.633 | 0.648 |
| rxLev_nodes | 0.582 | 0.601 | 0.575 | 0.585 | 0.602 |
| IDI | NRI | z.IDI | z.NRI | Delta.AUC | Frequency | |
|---|---|---|---|---|---|---|
| age_nodes | 0.02949 | 0.4113 | 6.03 | 5.63 | 0.03876 | 1.000 |
| differ_node4 | 0.03311 | 0.2309 | 5.25 | 3.22 | -0.00116 | 1.000 |
| rxLev_5FU_age | 0.03169 | 0.3291 | 5.24 | 4.44 | 0.00155 | 1.000 |
| node4 | 0.02194 | 0.4099 | 5.17 | 5.43 | 0.01960 | 1.000 |
| extent_node4 | 0.02131 | 0.4196 | 5.08 | 6.21 | -0.00891 | 1.000 |
| rxLev_5FU | 0.02764 | 0.3667 | 4.93 | 4.91 | 0.03483 | 1.000 |
| rxLev_5FU_extent | 0.02525 | 0.3699 | 4.73 | 4.95 | 0.04315 | 1.000 |
| rxLev_5FU_sex | 0.02741 | 0.2758 | 4.60 | 4.83 | 0.01332 | 1.000 |
| rxLev_5FU_differ | 0.02358 | 0.3674 | 4.58 | 4.92 | 0.03388 | 1.000 |
| nodes_node4 | 0.01945 | 0.3939 | 4.41 | 5.30 | 0.05286 | 1.000 |
| age_node4 | 0.00956 | 0.3836 | 3.48 | 5.79 | 0.01133 | 1.000 |
| rxLev_5FU_node4 | 0.00256 | 0.1000 | 3.48 | 1.26 | 0.00155 | 1.000 |
| nodes | 0.00922 | 0.3167 | 3.32 | 4.05 | 0.02763 | 1.000 |
| nodes_extent | 0.00695 | 0.2612 | 3.25 | 3.41 | 0.02664 | 1.000 |
| differ_extent | 0.01486 | 0.3378 | 3.20 | 4.30 | 0.00744 | 1.000 |
| nodes_surg | 0.00801 | 0.1529 | 3.05 | 2.16 | 0.01199 | 1.000 |
| extent | 0.01224 | 0.1378 | 2.99 | 2.52 | 0.01831 | 1.000 |
| sex_nodes | 0.00627 | 0.2258 | 2.97 | 2.86 | 0.01497 | 1.000 |
| rxLev_obstruct | 0.00930 | 0.1238 | 2.83 | 3.04 | 0.01237 | 0.333 |
| nodes_differ | 0.00540 | 0.2651 | 2.63 | 3.40 | 0.01499 | 1.000 |
| rxLev_nodes | 0.00516 | 0.0725 | 2.61 | 1.04 | 0.01693 | 1.000 |
Here we evaluate the model using the RRPlot() function.
Here we will use the predicted event probability assuming a baseline hazard for events withing 5 years
index <- predict(ml,dataColonTrain)
timeinterval <- round(2*mean(subset(dataColonTrain,status==1)$time),0)
timeinterval <- 2
h0 <- sum(dataColonTrain$status & dataColonTrain$time <= timeinterval)
h0 <- h0/sum((dataColonTrain$time > timeinterval) | (dataColonTrain$status==1))
rdata <- cbind(dataColonTrain$status,ppoisGzero(index,h0))
rrAnalysisTrain <- RRPlot(rdata,atRate=c(0.90),
timetoEvent=dataColonTrain$time,
title="Raw Train: Colon Cancer",
ysurvlim=c(0.00,1.0),
riskTimeInterval=timeinterval)
toinclude <- rdata[,1]==1
obstiemToEvent <- dataColonTrain[,"time"]
tmin<-min(obstiemToEvent)
sum(toinclude)
[1] 323
timetoEvent <- meanTimeToEvent(rdata[,2],timeinterval)
tmax<-max(c(obstiemToEvent,timetoEvent))
lmfit <- lm(obstiemToEvent[toinclude]~0+timetoEvent[toinclude])
sm <- summary(lmfit)
pander::pander(sm)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| timetoEvent[toinclude] | 0.598 | 0.0307 | 19.5 | 2.17e-56 |
| Observations | Residual Std. Error | \(R^2\) | Adjusted \(R^2\) |
|---|---|---|---|
| 323 | 1.35 | 0.541 | 0.54 |
plot(timetoEvent,obstiemToEvent,
col=1+rdata[,1],
xlab="Expected Time",
ylab="Observed Time",
main="Expected vs. Observed",
xlim=c(tmin,tmax),
ylim=c(tmin,tmax),
log="xy")
lines(x=c(tmin,tmax),y=lmfit$coefficients*c(tmin,tmax),lty=1,col="blue")
txt <- bquote(paste(R^2 == .(round(sm$r.squared,3))))
text(tmin+0.005*(tmax-tmin),tmax,txt,cex=0.7)
text(tmin+0.015*(tmax-tmin),tmax,sprintf("Slope=%4.3f",sm$coefficients[1]),cex=0.7)
legend("bottomright",legend=c("No Event","Event","Linear fit"),
pch=c(1,1,-1),
col=c(1,2,"blue"),
lty=c(-1,-1,1)
)
MADerror2 <- mean(abs(timetoEvent[toinclude]-obstiemToEvent[toinclude]))
pander::pander(MADerror2)
1.37
pander::pander(t(rrAnalysisTrain$keyPoints),caption="Threshold values")
| @:0.9 | @MAX_BACC | @MAX_RR | @SPE100 | p(0.5) | |
|---|---|---|---|---|---|
| Thr | 0.420 | 0.332 | 0.189 | 1.66e-01 | 0.502 |
| RR | 1.710 | 1.916 | 4.496 | 1.57e+01 | 1.848 |
| RR_LCI | 1.495 | 1.621 | 1.971 | 3.54e-02 | 1.629 |
| RR_UCI | 1.956 | 2.265 | 10.256 | 6.95e+03 | 2.096 |
| SEN | 0.316 | 0.656 | 0.985 | 1.00e+00 | 0.276 |
| SPE | 0.899 | 0.671 | 0.121 | 1.01e-02 | 0.943 |
| BACC | 0.608 | 0.664 | 0.553 | 5.05e-01 | 0.609 |
| NetBenefit | 0.129 | 0.263 | 0.414 | 4.25e-01 | 0.116 |
pander::pander(t(rrAnalysisTrain$OERatio$estimate),caption="O/E Ratio")
| O/E | Low | Upper | p.value |
|---|---|---|---|
| 0.676 | 0.604 | 0.754 | 6.74e-14 |
pander::pander(t(rrAnalysisTrain$OE95ci),caption="O/E Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 1.14 | 1.14 | 1.12 | 1.16 |
pander::pander(t(rrAnalysisTrain$OAcum95ci),caption="O/Acum Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 1.46 | 1.46 | 1.46 | 1.46 |
pander::pander(rrAnalysisTrain$c.index$cstatCI,caption="C. Index")
| mean.C Index | median | lower | upper |
|---|---|---|---|
| 0.675 | 0.676 | 0.648 | 0.701 |
pander::pander(t(rrAnalysisTrain$ROCAnalysis$aucs),caption="ROC AUC")
| est | lower | upper |
|---|---|---|
| 0.716 | 0.677 | 0.756 |
pander::pander((rrAnalysisTrain$ROCAnalysis$sensitivity),caption="Sensitivity")
| est | lower | upper |
|---|---|---|
| 0.313 | 0.263 | 0.366 |
pander::pander((rrAnalysisTrain$ROCAnalysis$specificity),caption="Specificity")
| est | lower | upper |
|---|---|---|
| 0.899 | 0.859 | 0.931 |
pander::pander(t(rrAnalysisTrain$thr_atP),caption="Probability Thresholds")
| 90% |
|---|
| 0.421 |
pander::pander(rrAnalysisTrain$surdif,caption="Logrank test")
| N | Observed | Expected | (O-E)^2/E | (O-E)^2/V | |
|---|---|---|---|---|---|
| class=0 | 490 | 222 | 276.8 | 10.9 | 76.9 |
| class=1 | 131 | 101 | 46.2 | 65.1 | 76.9 |
op <- par(no.readonly = TRUE)
calprob <- CoxRiskCalibration(ml,dataColonTrain,"status","time")
pander::pander(c(h0=calprob$h0,
Gain=calprob$hazardGain,
TimeInterval=calprob$timeInterval),
caption="Cox Calibration Parameters")
| h0 | Gain | TimeInterval |
|---|---|---|
| 0.726 | 1.58 | 3.01 |
h0 <- calprob$h0
timeinterval <- calprob$timeInterval;
rdata <- cbind(dataColonTrain$status,calprob$prob)
rrAnalysisTrain <- RRPlot(rdata,atRate=c(0.90),
timetoEvent=dataColonTrain$time,
title="Calibrated Train: Colon",
ysurvlim=c(0.00,1.0),
riskTimeInterval=timeinterval)
timetoEvent <- meanTimeToEvent(rdata[,2],timeinterval)
tmax<-max(c(obstiemToEvent,timetoEvent))
lmfit <- lm(obstiemToEvent[toinclude]~0+timetoEvent[toinclude])
sm <- summary(lmfit)
pander::pander(sm)
| Estimate | Std. Error | t value | Pr(>|t|) | |
|---|---|---|---|---|
| timetoEvent[toinclude] | 0.693 | 0.0356 | 19.5 | 2.17e-56 |
| Observations | Residual Std. Error | \(R^2\) | Adjusted \(R^2\) |
|---|---|---|---|
| 323 | 1.35 | 0.541 | 0.54 |
plot(timetoEvent,obstiemToEvent,
col=1+rdata[,1],
xlab="Expected Time",
ylab="Observed Time",
main="Expected vs. Observed",
xlim=c(tmin,tmax),
ylim=c(tmin,tmax),
log="xy")
lines(x=c(tmin,tmax),y=lmfit$coefficients*c(tmin,tmax),lty=1,col="blue")
txt <- bquote(paste(R^2 == .(round(sm$r.squared,3))))
text(tmin+0.005*(tmax-tmin),tmax,txt,cex=0.7)
text(tmin+0.015*(tmax-tmin),tmax,sprintf("Slope=%4.3f",sm$coefficients[1]),cex=0.7)
legend("bottomright",legend=c("No Event","Event","Linear fit"),
pch=c(1,1,-1),
col=c(1,2,"blue"),
lty=c(-1,-1,1)
)
MADerror2 <- c(MADerror2,mean(abs(timetoEvent[toinclude]-obstiemToEvent[toinclude])))
pander::pander(MADerror2)
1.37 and 1.19
pander::pander(t(rrAnalysisTrain$keyPoints),caption="Threshold values")
| @:0.9 | @MAX_BACC | @MAX_RR | @SPE100 | p(0.5) | |
|---|---|---|---|---|---|
| Thr | 0.6131 | 0.505 | 0.306 | 2.72e-01 | 0.500 |
| RR | 1.7098 | 1.916 | 4.496 | 1.57e+01 | 1.859 |
| RR_LCI | 1.4946 | 1.621 | 1.971 | 3.54e-02 | 1.564 |
| RR_UCI | 1.9559 | 2.265 | 10.256 | 6.95e+03 | 2.210 |
| SEN | 0.3158 | 0.656 | 0.985 | 1.00e+00 | 0.681 |
| SPE | 0.8993 | 0.671 | 0.121 | 1.01e-02 | 0.624 |
| BACC | 0.6076 | 0.664 | 0.553 | 5.05e-01 | 0.653 |
| NetBenefit | 0.0877 | 0.180 | 0.326 | 3.43e-01 | 0.174 |
pander::pander(t(rrAnalysisTrain$OERatio$estimate),caption="O/E Ratio")
| O/E | Low | Upper | p.value |
|---|---|---|---|
| 0.584 | 0.522 | 0.651 | 3.84e-26 |
pander::pander(t(rrAnalysisTrain$OE95ci),caption="O/E Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 0.987 | 0.987 | 0.969 | 1 |
pander::pander(t(rrAnalysisTrain$OAcum95ci),caption="O/Acum Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 1.04 | 1.04 | 1.04 | 1.05 |
pander::pander(rrAnalysisTrain$c.index$cstatCI,caption="C. Index")
| mean.C Index | median | lower | upper |
|---|---|---|---|
| 0.675 | 0.676 | 0.647 | 0.705 |
pander::pander(t(rrAnalysisTrain$ROCAnalysis$aucs),caption="ROC AUC")
| est | lower | upper |
|---|---|---|
| 0.716 | 0.677 | 0.756 |
pander::pander((rrAnalysisTrain$ROCAnalysis$sensitivity),caption="Sensitivity")
| est | lower | upper |
|---|---|---|
| 0.313 | 0.263 | 0.366 |
pander::pander((rrAnalysisTrain$ROCAnalysis$specificity),caption="Specificity")
| est | lower | upper |
|---|---|---|
| 0.899 | 0.859 | 0.931 |
pander::pander(t(rrAnalysisTrain$thr_atP),caption="Probability Thresholds")
| 90% |
|---|
| 0.614 |
pander::pander(rrAnalysisTrain$surdif,caption="Logrank test")
| N | Observed | Expected | (O-E)^2/E | (O-E)^2/V | |
|---|---|---|---|---|---|
| class=0 | 490 | 222 | 276.8 | 10.9 | 76.9 |
| class=1 | 131 | 101 | 46.2 | 65.1 | 76.9 |
The calibrated h0 and timeinterval were estimated on the training set
index <- predict(ml,dataColonTest)
rdata <- cbind(dataColonTest$status,ppoisGzero(index,h0))
rrAnalysisTest <- RRPlot(rdata,atThr = rrAnalysisTrain$thr_atP,
timetoEvent=dataColonTest$time,
title="Test: Colon Cancer",
ysurvlim=c(0.00,1.0),
riskTimeInterval=timeinterval)
pander::pander(t(rrAnalysisTest$keyPoints),caption="Threshold values")
| @:0.614 | @MAX_BACC | @MAX_RR | @SPE100 | p(0.5) | |
|---|---|---|---|---|---|
| Thr | 0.6143 | 0.5082 | 0.315 | 2.93e-01 | 0.4999 |
| RR | 1.6190 | 1.5780 | 1.665 | 1.87e+01 | 1.4736 |
| RR_LCI | 1.2654 | 1.2189 | 0.836 | 4.11e-02 | 1.1332 |
| RR_UCI | 2.0715 | 2.0429 | 3.315 | 8.52e+03 | 1.9161 |
| SEN | 0.3333 | 0.5366 | 0.951 | 1.00e+00 | 0.5610 |
| SPE | 0.8472 | 0.6736 | 0.104 | 2.78e-02 | 0.6181 |
| BACC | 0.5903 | 0.6051 | 0.528 | 5.14e-01 | 0.5895 |
| NetBenefit | 0.0223 | 0.0654 | 0.216 | 2.43e-01 | 0.0525 |
pander::pander(t(rrAnalysisTest$OERatio$estimate),caption="O/E Ratio")
| O/E | Low | Upper | p.value |
|---|---|---|---|
| 0.48 | 0.399 | 0.573 | 2.8e-20 |
pander::pander(t(rrAnalysisTest$OE95ci),caption="O/E Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 0.725 | 0.726 | 0.706 | 0.743 |
pander::pander(t(rrAnalysisTest$OAcum95ci),caption="O/Acum Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 0.852 | 0.852 | 0.849 | 0.855 |
pander::pander(rrAnalysisTest$c.index$cstatCI,caption="C. Index")
| mean.C Index | median | lower | upper |
|---|---|---|---|
| 0.613 | 0.613 | 0.561 | 0.663 |
pander::pander(t(rrAnalysisTest$ROCAnalysis$aucs),caption="ROC AUC")
| est | lower | upper |
|---|---|---|
| 0.612 | 0.544 | 0.68 |
pander::pander((rrAnalysisTest$ROCAnalysis$sensitivity),caption="Sensitivity")
| est | lower | upper |
|---|---|---|
| 0.333 | 0.251 | 0.424 |
pander::pander((rrAnalysisTest$ROCAnalysis$specificity),caption="Specificity")
| est | lower | upper |
|---|---|---|
| 0.847 | 0.778 | 0.902 |
pander::pander(t(rrAnalysisTest$thr_atP),caption="Probability Thresholds")
| 90% |
|---|
| 0.614 |
pander::pander(rrAnalysisTest$surdif,caption="Logrank test")
| N | Observed | Expected | (O-E)^2/E | (O-E)^2/V | |
|---|---|---|---|---|---|
| class=0 | 204 | 82 | 102.6 | 4.14 | 25.2 |
| class=1 | 63 | 41 | 20.4 | 20.82 | 25.2 |
Here we will cross validate the training set and evaluate also on the testing set. The h0 and the timeinterval are the ones estimated on the calibration process
rcv <- randomCV(theData=dataColonTrain,
theOutcome = Surv(time,status)~1,
fittingFunction=BSWiMS.model,
trainFraction = 0.75,
repetitions=50,
classSamplingType = "Pro",
testingSet=dataColonTest
)
.[+++++++-].[+++++-].[+++++-].[++++++++–].[+++++++++++++++]..[++++-].[+++++++++-+-]..[+++++++-+-].[++++-].[+++++++++++++].10 Tested: 858 Avg. Selected: 20.2 Min Tests: 1 Max Tests: 10 Mean Tests: 4.93007 . MAD: 0.4687263
.[+++++++-].[++++++–].[++++++++++-]..[++++++-].[+++++++++-].[++++++-].[+++++++-].[++++++++-+-].[+++++++-].[+++++++-]20 Tested: 887 Avg. Selected: 19.9 Min Tests: 1 Max Tests: 20 Mean Tests: 9.537768 . MAD: 0.467341
.[+++++++-].[++++++-].[++++++-].[++++++–+++-].[+++++++++-].[++++++++++–]..[+++++++-].[+++++++-].[++++++-].[+++++++-]30 Tested: 888 Avg. Selected: 20.33333 Min Tests: 2 Max Tests: 30 Mean Tests: 14.29054 . MAD: 0.4671782
.[++++++++++++++]..[++++++-].[++++++-].[++++++-].[+++++++++-].[+++++++-].[+++++–].[++++++-].[+++++++-].[++++++-]40 Tested: 888 Avg. Selected: 20.5 Min Tests: 3 Max Tests: 40 Mean Tests: 19.05405 . MAD: 0.4674747
.[+++++-].[++++++++++++++++]..[++++++++-].[+++++++++–].[+++++++++++-]..[++++++++-].[++++++-].[++++++-+-++-].[+-+++-].[+++++++++-]50 Tested: 888 Avg. Selected: 20.74 Min Tests: 4 Max Tests: 50 Mean Tests: 23.81757 . MAD: 0.4682315
stp <- rcv$survTestPredictions
stp <- stp[!is.na(stp[,4]),]
bbx <- boxplot(unlist(stp[,1])~rownames(stp),plot=FALSE)
times <- bbx$stats[3,]
status <- boxplot(unlist(stp[,2])~rownames(stp),plot=FALSE)$stats[3,]
prob <- ppoisGzero(boxplot(unlist(stp[,4])~rownames(stp),plot=FALSE)$stats[3,],h0)
rdatacv <- cbind(status,prob)
rownames(rdatacv) <- bbx$names
names(times) <- bbx$names
rrAnalysisCVTest <- RRPlot(rdatacv,atThr = rrAnalysisTrain$thr_atP,
timetoEvent=times,
title="CV Test: Colon Cancer",
ysurvlim=c(0.00,1.0),
riskTimeInterval=timeinterval)
pander::pander(t(rrAnalysisCVTest$keyPoints),caption="Threshold values")
| @:0.614 | @MAX_BACC | @MAX_RR | @SPE100 | p(0.5) | |
|---|---|---|---|---|---|
| Thr | 0.6149 | 0.494 | 0.320 | 0.250 | 0.500 |
| RR | 1.6663 | 1.694 | 2.336 | 1.000 | 1.629 |
| RR_LCI | 1.4779 | 1.477 | 1.510 | 0.000 | 1.426 |
| RR_UCI | 1.8786 | 1.942 | 3.612 | 0.000 | 1.860 |
| SEN | 0.3206 | 0.605 | 0.964 | 1.000 | 0.567 |
| SPE | 0.8801 | 0.656 | 0.124 | 0.000 | 0.676 |
| BACC | 0.6004 | 0.631 | 0.544 | 0.500 | 0.622 |
| NetBenefit | 0.0658 | 0.137 | 0.279 | 0.337 | 0.124 |
pander::pander(t(rrAnalysisCVTest$OERatio$estimate),caption="O/E Ratio")
| O/E | Low | Upper | p.value |
|---|---|---|---|
| 0.546 | 0.496 | 0.599 | 1.14e-45 |
pander::pander(t(rrAnalysisCVTest$OE95ci),caption="O/E Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 0.908 | 0.908 | 0.894 | 0.922 |
pander::pander(t(rrAnalysisCVTest$OAcum95ci),caption="O/Acum Mean")
| mean | 50% | 2.5% | 97.5% |
|---|---|---|---|
| 0.991 | 0.991 | 0.989 | 0.992 |
pander::pander(rrAnalysisCVTest$c.index$cstatCI,caption="C. Index")
| mean.C Index | median | lower | upper |
|---|---|---|---|
| 0.646 | 0.647 | 0.621 | 0.672 |
pander::pander(t(rrAnalysisCVTest$ROCAnalysis$aucs),caption="ROC AUC")
| est | lower | upper |
|---|---|---|
| 0.668 | 0.633 | 0.703 |
pander::pander((rrAnalysisCVTest$ROCAnalysis$sensitivity),caption="Sensitivity")
| est | lower | upper |
|---|---|---|
| 0.321 | 0.278 | 0.366 |
pander::pander((rrAnalysisCVTest$ROCAnalysis$specificity),caption="Specificity")
| est | lower | upper |
|---|---|---|
| 0.88 | 0.846 | 0.909 |
pander::pander(t(rrAnalysisCVTest$thr_atP),caption="Probability Thresholds")
| 90% |
|---|
| 0.614 |
pander::pander(rrAnalysisCVTest$surdif,caption="Logrank test")
| N | Observed | Expected | (O-E)^2/E | (O-E)^2/V | |
|---|---|---|---|---|---|
| class=0 | 692 | 303 | 377.3 | 14.6 | 95.8 |
| class=1 | 196 | 143 | 68.7 | 80.2 | 95.8 |